//网络请求的方式方法
import axios from 'axios'
import router from '@/router'

const instance = axios.create({
  //网络请求的公共配置
  timeout: 9000, // 9秒以后如果没有请求则取消请求
  //headers 是发送时的请求头
  headers: {
    Accept: 'application/json',
    'Content-Type': 'application/json',
  },
  baseURL: 'http://localhost:9500', //请求路径的头部
})

// 错误状态码的处理
const errorHandle = (status, info) => {
  switch (status) {
    case 400:
      console.log('语义有误')
      break
    case 401:
      console.log('服务器认证失败')
      break
    case 403:
      console.log('服务器拒绝访问')
      break
    case 404:
      console.log('地址错误')
      break
    case 500:
      console.log('服务器无响应')
      break
    case 408:
      console.log('用户另一处登录')
      break
    default:
      console.log(info) //其他的状态码则直接打印错误信息
      break
  }
}
//拦截器最常用的
//1.发送数据之前
instance.interceptors.request.use(
  (config) => {
    // //获取当前请求路径
    let reqUrl = config.url
    if (reqUrl === '/front/user/login') {
      // console.log("你已经登录，无需重复登录");
      router.push('/login')
    }
    return config //成功则返回所有的网络请求信息
  },
  (error) => {
    //返回所以错误的信息
    return Promise.reject(error)
  }
)

//2.获取数据之前
instance.interceptors.response.use(
  (response) => {
    return response.status === 200
      ? Promise.resolve(response)
      : Promise.reject(response)
  },
  (error) => {
    const { response } = error
    //错误的处理
    errorHandle(response.status, response.info)
  }
)
//导出
export default instance
